package vista;

import modelo.Empleado;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import applicationModels.ListadoEmpleados;

public class EmpleadosWindow extends SimpleWindow<ListadoEmpleados>{

	private static final long serialVersionUID = 1L;

	public EmpleadosWindow(WindowOwner parent) {
		super(parent, new ListadoEmpleados());
		this.getModelObject().actualizarListaEmpleados();
	}

	
	@Override
	public void createMainTemplate(Panel mainPanel) {
		this.setTitle("Empleados");
		super.createMainTemplate(mainPanel);
		this.createResultsGrid(mainPanel);
	}


	@Override
	public void addActions(Panel actionsPanel) {
		Button crear = new Button(actionsPanel);
		crear.setCaption("Crear");
		crear.onClick(new MessageSend(this, "crearEmpleado"));
		
		Button editar = new Button(actionsPanel);
		editar.setCaption("Editar");
		editar.onClick(new MessageSend(this, "editarEmpleado"));
		
		Button quitar=new Button(actionsPanel);
		quitar.setCaption("Quitar");
		quitar.onClick(new MessageSend(this.getModelObject(),"quitarEmpleado"));
		
		NotNullObservable empleadoSeleccionado = new NotNullObservable("empleadoSeleccionado");
		quitar.bindEnabled(empleadoSeleccionado);
		editar.bindEnabled(empleadoSeleccionado);
	}
		
	public void createResultsGrid(Panel mainPanel) {
		Table<Empleado> tablaEmpleados = new Table<Empleado>(mainPanel, Empleado.class);
		tablaEmpleados.setHeigth(400);
		tablaEmpleados.setWidth(800);

		tablaEmpleados.bindItemsToProperty("resultados");
		tablaEmpleados.bindValueToProperty("empleadoSeleccionado");

		new Column<Empleado>(tablaEmpleados).setTitle("Nombre")
				.setFixedSize(100).bindContentsToProperty("nombre");

		new Column<Empleado>(tablaEmpleados).setTitle("Apellido")
				.setFixedSize(100).bindContentsToProperty("apellido");

		new Column<Empleado>(tablaEmpleados).setTitle("Legajo")
				.setFixedSize(100).bindContentsToProperty("legajo");
	
		new Column<Empleado>(tablaEmpleados).setTitle("Dias disponible")
			.setFixedSize(500).bindContentsToTransformer(new EmpleadoDiasDisponibleToStringTransformer());
		
	}	

	@Override
	public void createFormPanel(Panel mainPanel) {
		mainPanel.setLayout(new VerticalLayout());
	}

	public void editarEmpleado(){
		this.openEmpleadoDialog(this.getModelObject().getEmpleadoSeleccionado());
	}
	
	public void crearEmpleado(){
		this.openEmpleadoDialog(new Empleado());
	}
	
	private void openEmpleadoDialog(Empleado empleado){
		CrearEditarEmpleadoWindow empleadoWindow = new CrearEditarEmpleadoWindow(this,empleado);
		empleadoWindow.onAccept(new MessageSend(this.getModelObject(), "actualizarListaEmpleados"));
		empleadoWindow.open();
	}
	
}

